<?php
/**
 * CRMLite History Class
 *
 * Based on Zend_Session
 *
 * @final
 * @package     Crmlite_History
 * @version     $Id: History.php 55 2007-09-09 12:44:28Z etng2004 $
 * @copyright   2006-2007 ETE.CN
 * @author      Yi BO  <etng2004@gmail.com>
 * @license     PHP Version 3.0 {@link http://www.php.net/license/3_0.txt}
 */
class Crmlite_History
{
    /**
     * 历史记录长度，最长不超过20
     *
     * @var int
     */
    protected static $history_limit = 20;
    /**
     * 用于保存历史记录的 Session 命名空间
     *
     * @var string
     */
    protected static $session_ns = 'Crmlite_History';
    /**
     * 保存当前路径
     *
     * 如果没有指定网址，则默认为客户端请求的网址，并返回之
     *
     * @param string $controller    控制器
     * @param string $action        方法
     * @param string $module        模块
     * @param string $url           请求地址
     * @return string               请求地址
     */
    public static function save($controller, $action, $module = null, $url = null)
    {
        $session = new Zend_Session_Namespace(self::$session_ns);
        $histories = isset($session->histories)? $session->histories: array();
        $tag = self::getTag($controller, $action, $module);
        !is_null($url)      || $url = $_SERVER['REQUEST_URI'];

        $found = false;
        foreach ($histories as $i => $history)
        {
        	if($history['tag'] == $tag)
        	{
        	    $histories[$i]['url'] = $url;
        	    $found = true;
        	    break;
        	}
        }

        if(!$found)
        {
            $histories[] = array(
            'tag' => $tag,
            'url' => $url,
            );
	   }
       if (sizeof($histories)>self::$history_limit)
       {
       	    array_shift($histories);
       }
        $session->histories = $histories;
        return $url;
    }
    /**
     * 生成历史记录保存的 Tag 标记
     *
     * @param string $controller    控制器
     * @param string $action        方法
     * @param string $module        模块
     * @return string
     */
    public static function getTag($controller, $action, $module = null)
    {
        !is_null($module)   || $module = 'default';
    	return "{$module}-{$controller}-{$action}";
    }
    /**
     * 取得相应页面的历史记录，如不存在则返回默认值
     *
     *
     * @param string $controller    控制器
     * @param string $action        方法
     * @param string $module        模块
     * @param string $default       默认网址
     * @return string               历史记录网址
     */
    public static function get($controller, $action, $module = null , $default = null)
    {
        $session = new Zend_Session_Namespace(self::$session_ns);
        $tag = self::getTag($controller, $action, $module);
        if(isset($session->histories))
        {
            foreach($session->histories as $history)
            {
                if($history['tag'] == $tag)
                {
                    return $history['url'];
                }
            }
        }
        return $default;
    }
}